
#include<memory>
#include<iostream>
#include <brpc/server.h>
#include <butil/logging.h>
#include "main.pb.h"
// 1.创建一个继承于EchoService的接口类
class EchoServiceImpl : public example::EchoService
{
public:
    using ptr = std::shared_ptr<EchoServiceImpl>;
    EchoServiceImpl() {}
    ~EchoServiceImpl() {}
    void Echo(google::protobuf::RpcController *controller,
              const ::example::EchoRequest *request,
              ::example::EchoResponse *response,
              ::google::protobuf::Closure *done)
    {
        // 管理rpc对象
        brpc::ClosureGuard rpc_guard(done);
        // 处理业务
        std::cout << "收到消息# " << request->message() << std::endl;
        std::string resp = request->message() + "--已接收";
        response->set_message(resp);

        // 理论上需要Closure来进行业务响应的发送，但是我们已经管理了这个done对象
        // done->Run();
    }
};

int main(int argc, char *argv[])
{
    // 构造服务器
    auto server = std::make_shared<brpc::Server>();
    // 构建服务
    EchoServiceImpl::ptr echo_service = std::make_shared<EchoServiceImpl>();
    // 添加服务
    int ret = server->AddService(echo_service.get(), brpc::ServiceOwnership::SERVER_DOESNT_OWN_SERVICE);
    if (ret == -1)
    {
        std::cout << "服务器添加服务失败" << std::endl;
        return -1;
    }
    auto options = std::make_shared<brpc::ServerOptions>();
    // 启动服务器
    options->idle_timeout_sec = -1; // 连接空闲超时时间
    options->num_threads = 1;
    ret = server->Start(8888, options.get());
    if (ret == -1)
    {
        std::cout << "服务器启动失败" << std::endl;
        return -1;
    }
    // 服务器进行等待
    server->RunUntilAskedToQuit();
}

// int main(int argc, char *argv[])
// {
//     // 构造服务器
//     auto server = std::make_shared<brpc::Server>();
//     // 构建服务
//     EchoServiceImpl echo_service;
//     // 添加服务
//     int ret = server->AddService(&echo_service, brpc::ServiceOwnership::SERVER_DOESNT_OWN_SERVICE);
//     if (ret == -1)
//     {
//         std::cout << "服务器添加服务失败" << std::endl;
//         return -1;
//     }
//     brpc::ServerOptions options;
//     // 启动服务器
//     options.idle_timeout_sec = -1; // 连接空闲超时时间
//     options.num_threads = 1;
//     ret = server->Start(8888, &options);
//     if (ret == -1)
//     {
//         std::cout << "服务器启动失败" << std::endl;
//         return -1;
//     }
//     // 服务器进行等待
//     server->RunUntilAskedToQuit();
// }

/*
*/